import path from "path";
import {fileURLToPath} from "url";
import vue from "eslint-plugin-vue";
import vueParser from "vue-eslint-parser";
import {FlatCompat} from "@eslint/eslintrc";
import typescriptParser from "@typescript-eslint/parser";
import typescriptPlugin from "@typescript-eslint/eslint-plugin";

const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const compat = new FlatCompat({
    baseDirectory: __dirname,
});

const config = [
    ...compat.extends("plugin:prettier/recommended"),
    {
        files: ["**/*.vue"], // 只应用于 .vue 文件
        languageOptions: {
            parser: vueParser, // 使用 vue-eslint-parser 解析整个 .vue 文件
            parserOptions: {
                parser: typescriptParser, // 使用 @typescript-eslint/parser 解析 <script> 部分
                ecmaVersion: 2020,
                sourceType: "module",
            },
        },
        plugins: {
            vue, // Vue 插件
            "@typescript-eslint": typescriptPlugin, // TypeScript 插件
        },
        rules: {
            ...typescriptPlugin.configs.recommended.rules, // TypeScript 推荐规则
            ...vue.configs["flat/base"].rules, // Vue 推荐规则
            // 你可以在这里添加或覆盖规则
            "vue/multi-word-component-names": ["off"],
            "@typescript-eslint/no-explicit-any": ["warn"],
            "@typescript-eslint/no-unused-vars": ["warn"],
            "vue/no-reserved-props": ["warn"],
        },
    },
    {
        files: ["**/*.ts", "**/*.js"], // 应用于 .ts 和 .js 文件
        languageOptions: {
            parser: typescriptParser, // 使用 @typescript-eslint/parser 解析 TypeScript 代码
            ecmaVersion: 2020,
            sourceType: "module",
        },
        plugins: {
            "@typescript-eslint": typescriptPlugin, // TypeScript 插件
        },
        rules: {
            ...typescriptPlugin.configs.recommended.rules, // TypeScript 推荐规则
            // 你可以在这里添加或覆盖规则
            "@typescript-eslint/no-explicit-any": ["warn"],
            "@typescript-eslint/no-unused-vars": ["warn"],
        },
    },
];

export default config;
